class ListaArbol:

    
    def generarListaArbol(direccionArchivo):         #Este metodo regresara un prototipo para crear nuestro Arbol apartir de un archivo de texto leido
        leerCaracter = open(direccionArchivo,"r")
        leerLinea = open(direccionArchivo,"r")
        listaFrecuencia = []

        
        while True:                                   #Este ciclo me va a permitir extraer una lista del archivo donde contenga
                                                      #tanto caracteres como sus respectivas frecuencias de aparicion
            caracter = leerCaracter.read(1)
            if not caracter: break
            if listaFrecuencia.count(caracter) == 0:  #Compara si ya hay un caracter en la lista igual al que se acaba de tomar
                contador = 0
                leerLinea.seek(0)
                while True:                           # Este otro while nos hara un conteo de la cantidad de veses que aparece cada caracter y asi tener la frecuencia
                    lineaCont = leerLinea.read(512)   # Escogi que leyera pedazo a pedazo para que no gaste tanta memoria en la cadena si el archivo es grande
                    if not lineaCont: break
                    contador = contador + lineaCont.count(caracter)
                listaFrecuencia.append(caracter)
                listaFrecuencia.append(contador)


        leerLinea.close()    
        leerCaracter.close()

        listaFrecuenciaEqu=[]
        for i in range(0,len(listaFrecuencia)-1,2):   # Este ciclo es para crear una lista agrupando tanto el caracter como la frecuencia en cada elemento de la lista
            listaAlt = []
            listaAlt.append(listaFrecuencia[i])
            listaAlt.append(listaFrecuencia[i+1])
            listaFrecuenciaEqu.append(listaAlt)



        for i in range(1, len(listaFrecuenciaEqu)-1): # Este sort es para ordenar de menor a mayor la nueva lista ya que sera evaluada mas adelanter para generar el Arbol
            for j in range(0,len(listaFrecuenciaEqu)-i):
                if listaFrecuenciaEqu[j][1] > listaFrecuenciaEqu[j+1][1]:
                    listaFrecuenciaEqu[j], listaFrecuenciaEqu[j+1] = listaFrecuenciaEqu[j+1], listaFrecuenciaEqu[j]

        return listaFrecuenciaEqu


        

